package com.ybg.util;

import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Properties;

import org.apache.commons.lang3.math.NumberUtils;

/**
 * 配置管理工具类。
 * 
 * @author ningjh
 * @since  2016-07-19
 */
public final class ConfigUtil {
	/** 错误码前缀 */
	public  static final String   ERROR_PREFIX = "err_";
	
	private static final Properties properties = new Properties();
	private static final String     PATH       = "/config.properties";
	

	static {
		try (Reader reader = new InputStreamReader(ConfigUtil.class.getResourceAsStream(PATH), "UTF-8")) {
			properties.load(reader);
		} catch (Exception e) {
			LogUtil.error("加载配置文件 {} 出错！", PATH, e);
		}
	}

	/**
	 * 根据配置文件中的键，获取相应的值。如果键不存在，返回空。
	 * 
	 * @param key
	 * @return
	 */
	public static String getString(String key) {
		return getString(key, null);
	}

	/**
	 * 根据配置文件中的键，获取相应的值。如果键不存在，返指定的默认值。
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static String getString(String key, String defaultValue) {
		return properties.getProperty(key, defaultValue);
	}
	
	/**
	 * 根据指定配置文件中的键，获取相应的值。
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static String getString(Properties targetProperties,String key) {
		return targetProperties.getProperty(key);
	}

	/**
	 * 根据配置文件中的键，获取相应的整形值。如果键不存在，或发生异常，返指定的默认值。
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static int getInt(String key, int defaultValue) {
		return NumberUtils.toInt(getString(key), defaultValue);
	}

	/**
	 * 根据配置文件中的键，获取相应的长整形值。如果键不存在，或发生异常，返指定的默认值。
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static long getLong(String key, long defaultValue) {
		return NumberUtils.toLong(getString(key), defaultValue);
	}
}
